package com.powernode.utils;

import com.powernode.model.SecurityUser;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.Set;

/**
 * 认证授权工具类
 *
 * @author HP
 */
public class AuthUtils {
    /**
     * 获取当前登录的用户信息
     * 该方法利用Spring Security框架提供的SecurityContextHolder获取当前安全上下文，
     * 进而提取出认证信息中的用户详情，强转为SecurityUser类型并返回
     *
     * @return SecurityUser 当前登录的用户信息，包括用户名、密码、权限等
     */
    public static SecurityUser getLoginUser() {
        return (SecurityUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    }

    /**
     * 获取当前登录用户的ID
     * 该方法调用getLoginUser()获取当前登录的用户信息对象，
     * 然后调用该对象的getUserId方法提取用户ID
     *
     * @return Long 当前登录用户的唯一标识ID
     */
    public static Long getLoginUserId() {
        return getLoginUser().getUserId();
    }

    /**
     * 获取当前登录用户的权限集合
     * 此方法用于从当前登录的用户对象中获取其权限信息它调用了getLoginUser()方法来获取用户对象，
     * 然后调用用户的getPerms()方法来获取权限集合这个过程假设了用户对象中已经有一个方法getPerms()
     * 可以返回用户的权限信息，通常以字符串集合的形式表示
     *
     * @return Set<String> 返回一个包含当前登录用户所有权限的集合如果用户没有权限或者用户对象为null，
     * 此方法可能返回null或空集合具体行为取决于getLoginUser()和用户对象的getPerms()方法的实现
     */
    public static Set<String> getLoginUserPerms() {
        return getLoginUser().getPerms();
    }

    /**
     * 获取Security容器中认证用户对象的openid
     * @return
     */
    public static String getMemberOpenId() {
        return getLoginUser().getOpenid();
    }
}